import java.util.Arrays;

/**
 * 删除 重复元素！
 * <p>
 * <p>
 * 示例 1：
 * 输入：nums = [1,1,2]
 * 输出：2, nums = [1,2,_]
 * 解释：函数应该返回新的长度 2 ，并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。
 * 示例 2：
 * 输入：nums = [0,0,1,1,1,2,2,3,3,4]
 * 输出：5, nums = [0,1,2,3,4]
 * 解释：函数应该返回新的长度 5 ， 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。
 */
public class LeetCode26 {

    public static void main(String[] args) {
        System.out.println(distinctLength(new int[]{0, 0, 1, 1, 1, 2, 2, 3, 3, 4}));
    }

    //## 前后指针
// 快慢相等值不变，慢针不动快针走
// 快慢不等值，我是题型1，慢针向前一步走，快针赋值给慢针， 快针向前走一步
// 快慢不等值，我是题型2，快针赋值给慢针，慢针向前一步走，快针向前一步走
    public static int distinctLength(int[] nums) {
        int slow = 0, fast = 0;
        while (fast < nums.length) {
            if (nums[fast] != nums[slow]) {
                //快慢不等值，慢针向前一步走，快针赋值给慢针 快针向前走一步,
                slow++;
                nums[slow] = nums[fast];
            }
            //快慢相等值不变，慢针不动快针走;
            //快慢不等值，我是题型1，慢针向前一步走，快针赋值给慢针， 快针向前走一步, 都是需要fast走一步
            fast++;
        }
        //返回长度，就是指针索引+1
        return slow + 1;
    }
}
